package main

import (
	"fmt"
	"log"
	"os"
	"path"
	"runtime"
	"time"
)

func lineLnfo(skip int) (funcName, filePath, fileName string, line int) {
	// Go语言中没有默认参数的概念，所见即所得
	// 0表示这个runtime.Caller定义的这个位置
	// 其他函数调用此函数，需要看有几层：一层就传入'1' 。。。
	pc, file, line, ok := runtime.Caller(skip)
	if !ok {
		fmt.Printf("runtime.Caller is failed\n")
		return
	}
	filePath = runtime.FuncForPC(pc).Name()
	funcName = path.Base(file)
	// 由于返回值已经定义变量，不需要再使用`:=`定义
	// return会自己返回这些变量，不像js需要自己去返回
	return
	// fmt.Println(pc, funcName)                              // uintptr??? 4848646
	// fmt.Printf("绝对路径：%v\n当前文件名：%v", file, path.Base(file)) // 文件路径
	// fmt.Println(line)                                      // 行号
}

func logPrint() {
	fileObj, err := os.OpenFile("./log.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
	if err != nil {
		fmt.Printf("error: %v\n", err)
		return
	}
	defer fileObj.Close()
	log.SetOutput(fileObj)
	for {
		log.Println("日志")
		time.Sleep(time.Second * 3)
	}
}
func main() {
	logPrint()
	// info(0)

}
